
#ifndef SIG_CUSTOM_TILING_H
#define SIG_CUSTOM_TILING_H
#include <cstdint>

/**
 *                       _oo0oo_
 *                      o8888888o
 *                      88" . "88
 *                      (| -_- |)
 *                      0\  =  /0
 *                    ___/`---'\___
 *                  .' \\|     |// '.
 *                 / \\|||  :  |||// \
 *                / _||||| -:- |||||- \
 *               |   | \\\  -  /// |   |
 *               | \_|  ''\---/''  |_/ |
 *               \  .-\__  '-'  ___/-. /
 *             ___'. .'  /--.--\  `. .'___
 *          ."" '<  `.___\_<<|>_/___.' >' "".
 *         | | :  `- \`.;`\ _ /`;.`/ - ` : | |
 *         \  \ `_.   \_ __\ /__ _/   .-` /  /
 *     =====`-.____`.___ \_____/___.-`___.-'=====
 *                       `=---='
 *
 *     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 *               佛祖保佑         永无BUG
 */

constexpr int32_t FLOAT_BYTES = 4;                    // FP32字节数
constexpr int32_t FLOAT16_BYTES = 2;                  // FP16/BF16字节数

struct ReflectionPad1dTilingData {
    uint32_t tilingKey;      // TilingKey
    uint32_t inputDim;       // 输入维度（1/2/3）
    uint32_t nSize;          // N维度大小（3维：索引0；2维：无，设为1）
    uint32_t cSize;          // C维度大小（3维：索引1；2维：索引0；1维：设为1）
    uint32_t wSize;          // 目标维度大小
    uint32_t padLeft;        // 左填充量
    uint32_t padRight;       // 右填充量

    uint32_t alignWSize;     // 目标维度32字节对齐后大小
    uint32_t alignOutWSize;  // 输出目标维度对齐后大小

    uint32_t blockNum;       // 实际使用核心数
    uint32_t ncPerCore;      // 每核处理的N×C任务数（1维时=1）
    uint32_t tailNC;         // 尾任务数
};

enum class TilingKey {
    TILING_KEY_FP32,
    TILING_KEY_FP16,
    TILING_KEY_BF16
};

#endif